package com.example.weather_forecast;

import android.util.Log;
import android.util.Xml;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

public class ParsewithDOM {
    public static List<WeatherInfo> getInfosFromXMLbyDOM (InputStream is) throws Exception {
        //建立DocumentBuilderFactor，用于获得DocumentBuilder对象：
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //2.建立DocumentBuidler：
        DocumentBuilder builder = factory.newDocumentBuilder();
        //3.建立Document对象，获取树的入口：
        Document doc = builder.parse(is);
        //4.建立NodeList：
        NodeList node = doc.getElementsByTagName("city"); //city及其以下树的集合

        List<WeatherInfo> weatherInfos = new ArrayList<WeatherInfo>();
        WeatherInfo weatherInfo = new WeatherInfo();

        for(int i=0;i<node.getLength();i++){
            Element e = (Element)node.item(i);//获取每个城市
            String id = e.getAttributes().item(0).getNodeValue();
            Log.v("life",id);
            //getElementsByTagName("temp").item(0)获得了该city（元素）下的所有temp节点并取第一个temp节点(就1个)
            //getFristChild()获取第一个子节点
            //getNodeValue()获得节点的值
            String temp = e.getElementsByTagName("temp").item(0).getFirstChild().getNodeValue();
            Log.v("life",temp);
            String weather = e.getElementsByTagName("weather").item(0).getFirstChild().getNodeValue();
            String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
            String pm = e.getElementsByTagName("pm").item(0).getFirstChild().getNodeValue();
            String wind = e.getElementsByTagName("wind").item(0).getFirstChild().getNodeValue();
            weatherInfo.setId(id);
            weatherInfo.setTemp(temp);
            weatherInfo.setWeather(weather);
            weatherInfo.setName(name);
            weatherInfo.setPm(pm);
            weatherInfo.setWind(wind);
            weatherInfos.add(weatherInfo); //顺序添加每个城市
            weatherInfo = new WeatherInfo(); //创建新对象
        }
        return weatherInfos;
    }
}
